package leetcode每日一题;

/**
 * 1. 问题描述
 *      给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 *
 * 2. 算法分析
 *
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class 字符串中的第一个唯一字符 {
    public static void main(String[] args) {

    }


    public static int firstUniqChar(String s) {
        int[] lastIndex = new int[26]; // 记录每个字符最后一次出现的索引
        int[] count = new int[26]; // 计数
        for(int i = 0; i < s.length(); i++) {
            lastIndex[s.charAt(i)-'a'] = i;
            count[s.charAt(i)-'a']++;
        }
        for(int i = 0; i < s.length(); i++) {
            // 如果当前的元素最后一次出现的索引等于当前字符在字符串中的索引，并且该元素只出现了一次，
            // 那么这个元素就是我们要找的元素
            if(lastIndex[s.charAt(i)-'a'] == i && count[s.charAt(i)-'a'] == 1) {
                return i;
            }
        }
        return -1;
    }
}
